function browserDetectNav(chrAfterPoint)
{
    var
            UA = window.navigator.userAgent, // содержит переданный браузером юзерагент
            //--------------------------------------------------------------------------------
            OperaB = /Opera[ \/]+\w+\.\w+/i, //
            OperaV = /Version[ \/]+\w+\.\w+/i, //	
            FirefoxB = /Firefox\/\w+\.\w+/i, // шаблоны для распарсивания юзерагента
            ChromeB = /Chrome\/\w+\.\w+/i, //
            SafariB = /Version\/\w+\.\w+/i, //
            IEB = /MSIE *\d+\.\w+/i, //
            SafariV = /Safari\/\w+\.\w+/i, //
            //--------------------------------------------------------------------------------
            browser = new Array(), //массив с данными о браузере
            browserSplit = /[ \/\.]/i, //шаблон для разбивки данных о браузере из строки
            OperaV = UA.match(OperaV),
            Firefox = UA.match(FirefoxB),
            Chrome = UA.match(ChromeB),
            Safari = UA.match(SafariB),
            SafariV = UA.match(SafariV),
            IE = UA.match(IEB),
            Opera = UA.match(OperaB);

    //----- Opera ----
    if ((!Opera == "") & (!OperaV == ""))
        browser[0] = OperaV[0].replace(/Version/, "Opera")
    else
    if (!Opera == "")
        browser[0] = Opera[0]
    else
    //----- IE -----
    if (!IE == "")
        browser[0] = IE[0]
    else
    //----- Firefox ----
    if (!Firefox == "")
        browser[0] = Firefox[0]
    else
    //----- Chrom ----
    if (!Chrome == "")
        browser[0] = Chrome[0]
    else
    //----- Safari ----
    if ((!Safari == "") && (!SafariV == ""))
        browser[0] = Safari[0].replace("Version", "Safari");
    //------------ Разбивка версии -----------

    var
            outputData;                                      // возвращаемый функцией массив значений
    // [0] - имя браузера, [1] - целая часть версии
    // [2] - дробная часть версии
    if (browser[0] != null)
        outputData = browser[0].split(browserSplit);
    if ((chrAfterPoint == null) && (outputData != null))
    {
        chrAfterPoint = outputData[2].length;
        outputData[2] = outputData[2].substring(0, chrAfterPoint); // берем нужное ко-во знаков
        return(outputData);
    }
    else
        return(false);
}
function distans(x1, y1, x2, y2) {
    var xdiff = x2 - x1;
    var ydiff = y2 - y1;
    return Math.pow((xdiff * xdiff + ydiff * ydiff), 0.5);
}
function angleVector(oldX, oldY, newX, newY) {
    //$("#log").html(oldX+" "+oldY+" "+newX+" "+newY);
    var x1 = 1;
    var y1 = 0;
    var x2 = newX - oldX;
    var y2 = newY - oldY;
    var angle = Math.acos((x1 * x2 + y1 * y2) / (Math.pow((x1 * x1 + y1 * y1), 0.5) * Math.pow((x2 * x2 + y2 * y2), 0.5))) * 180 / Math.PI;
    x1 = oldX + 1;
    y1 = oldY;
    var sign = (x1 - oldX) * (newY - oldY) - (y1 - oldY) * (newX - oldX);
    if (sign < 0) {
        angle = 360 - angle;
    }
    angle = Math.round(angle);
    return angle;
}
function rotatePoint(X, Y, X0, Y0, angle) {
    var p = {
        x: 0,
        y: 0
    }
    p.x = X0 + (X - X0) * Math.cos(angle) - (Y - Y0) * Math.sin(angle);
    p.y = Y0 + (Y - Y0) * Math.cos(angle) - (X - X0) * Math.sin(angle);
    return p;
}
function secondsToHms(d) {
    d = Number(d);
    var h = Math.floor(d / 3600);
    var m = Math.floor(d % 3600 / 60);
    var s = Math.floor(d % 3600 % 60);
    return ((h > 0 ? h + ":" : "") + ((h > 0 && m < 10 ? "0" : "") + m + ":") + (s < 10 ? "0" : "") + s);
}
function refreshTimer() {
    myTimer.sec--;
    var time = myTimer.sec < 10 ? "0" + myTimer.sec : myTimer.sec;
    myTimer.obj.html(time);
    myTimer.inter = setTimeout("refreshTimer()", 1000);
    if (myTimer.sec <= 0) {
        clearInterval(myTimer.inter);
        myTimer.success();
    }
}
var myTimer = {
    sec: 0,
    obj: 0,
    inter: 0,
    start: function(_sec, _obj)
    {
        this.sec = _sec;
        this.obj = _obj;
        refreshTimer();
    },
    success: function() {
        $("#timeOutRound").hide();
        $('#bossMessage').hide();
        flagEndRound = false;
        objects.me = [];
        objects.units = [];
        objects.rockets = [];
        objects.marks = [];
        //objects.unitsStaticInfo=[];
        //meId=0;
        shots = [];
        hits = [];
        smoke = [];
    }
};
function refreshTurboTimer() {
    myTurboTimer.sec--;
    var day_p = parseInt(myTurboTimer.sec / 86400);
    var day_str = ' дней ';
    if (day_p == 1 || day_p == 21) {
        day_str = ' день ';
    } else if (day_p == 2 || day_p == 3 || day_p == 4 || day_p == 22 || day_p == 23 || day_p == 24) {
        day_str = ' дня ';
    }
    var day = day_p == 0 ? '' : day_p + day_str;
    var hours = parseInt((myTurboTimer.sec / 3600) % 24) + ':' == '0:' ? '' : parseInt((myTurboTimer.sec / 3600) % 24) + ':';
    var minutes = parseInt((myTurboTimer.sec % 3600) / 60) + ':' == '0:' ? '' : parseInt((myTurboTimer.sec % 3600) / 60) + ':';
    var tsec = parseInt((myTurboTimer.sec % 3600) % 60) < 10 ? "0" + parseInt((myTurboTimer.sec % 3600) % 60) : parseInt((myTurboTimer.sec % 3600) % 60);
    var html = day + hours + minutes + tsec;
    myTurboTimer.obj.html(html);
    myTurboTimer.inter = setTimeout("refreshTurboTimer()", 1000);
    if (myTurboTimer.sec <= 0) {
        clearInterval(myTurboTimer.inter);
        myTurboTimer.success();
    }
}
var myTurboTimer = {
    sec: 0,
    obj: 0,
    inter: 0,
    start: function(_sec, _obj)
    {
        this.sec = _sec;
        this.obj = _obj;
        refreshTurboTimer();
    },
    success: function() {
    }
};
function fixAngle(angle) {
    var modAngle = angle % 360;
    if (modAngle < 0) {
        modAngle += 360;
    }
    return modAngle;
}
function randomFromTo(f, t) {
    return f + Math.random() * (t - f);
}